package actions;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Map;

import modelo.Comentario;
import modelo.Tesina;
import modelo.Usuario;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.interceptor.SessionAware;

import DAO.ComentarioDAO;
import DAO.FactoryDAO;
import DAO.TesinaDAO;
import DAO.UsuarioDAO;
import DAO.VotacionDAO;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

@Action(value = "/AgregarComentarioFront")
@Result(location = "/jsp/principal/frontend.jsp", name = "SUCCESS")
public class AgregarComentarioFrontAction extends ActionSupport implements
		SessionAware {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private Map<String, Object> session;
	private String comentario;
	private Collection<Comentario> collComentarios = new ArrayList<Comentario>();
	private String votoPos;
	private String votoNeg;
	private Long id_usuario;
	private int cantColl=0;
	private Tesina tesis= new Tesina();

	public String execute() {
		//vuelvo a cargar las variables necesarias para el VerTesinaFront.jsp
		session = ActionContext.getContext().getSession();
		Long idTesis = (Long) session.get("idTesis");
		ComentarioDAO comentarioDAO = FactoryDAO.getComentarioDAO();
		
		this.verificarVotacion(idTesis);
		
		this.guardarComentarioNuevo(comentarioDAO);
		
		collComentarios = comentarioDAO.obtenerComentariosporIdTesis(idTesis);
		cantColl = collComentarios.size();
		return "SUCCESS";
	}

	private void guardarComentarioNuevo(ComentarioDAO comentarioDAO) {
		
		UsuarioDAO usuarioDAO = FactoryDAO.getUsuarioDAO();
		Usuario usuario = usuarioDAO.buscarUsuario((Long) session.get("id"));
		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy  hh:mm:ss a");
 		Date d = new Date();
		comentarioDAO.agregarComentario(tesis,usuario, comentario,sdf.format(d));
		
	}

	private void verificarVotacion( Long idTesis){
		
		TesinaDAO tesinaDAO = FactoryDAO.getTesinaDAO();
		tesis = tesinaDAO.buscarTesis(idTesis);
		votoNeg = tesis.getVotoNegativos();
		votoPos = tesis.getVotoPositivos();
		VotacionDAO vDAO = FactoryDAO.getVotacionDAO();
		if (getId_usuario() != null) {
			if (!(vDAO.buscarVotacion(idTesis, id_usuario))) {
				session.put("votacion", "/jsp/layoutVerTesina/PuedeVotar.jsp");
			} else {
				session.put("votacion", "/jsp/layoutVerTesina/noPuedeVotar.jsp");
			}
		}else{
			session.put("votacion", "/jsp/layoutVerTesina/noPuedeVotar.jsp");
		}
		
	}

	@Override
	public void setSession(Map<String, Object> arg0) {
		// TODO Auto-generated method stub

	}

	public String getComentario() {
		return comentario;
	}

	public void setComentario(String comentario) {
		this.comentario = comentario;
	}

	public Collection<Comentario> getCollComentarios() {
		return collComentarios;
	}

	public void setCollComentarios(Collection<Comentario> collComentarios) {
		this.collComentarios = collComentarios;
	}

	public String getVotoPos() {
		return votoPos;
	}

	public void setVotoPos(String votoPos) {
		this.votoPos = votoPos;
	}

	public String getVotoNeg() {
		return votoNeg;
	}

	public void setVotoNeg(String votoNeg) {
		this.votoNeg = votoNeg;
	}

	public Long getId_usuario() {
		return id_usuario;
	}

	public void setId_usuario(Long id_usuario) {
		this.id_usuario = id_usuario;
	}

	public int getCantColl() {
		return cantColl;
	}

	public void setCantColl(int cantColl) {
		this.cantColl = cantColl;
	}

	public Tesina getTesis() {
		return tesis;
	}

	public void setTesis(Tesina tesis) {
		this.tesis = tesis;
	}

}
